<?php

/*
 * CopyRight  : (C)2012-2099 HaoTeam Inc.
 * Document   : EmailService.php
 * Created on : 2021-10-15 12:49:50
 * Author     : Tiger <1192851302@qq.com>
 * Description: This is NOT a freeware, use is subject to license terms.
 *              这即使是一个免费软件,使用时也请遵守许可证条款,得到当时人书面许可.
 *              未经书面许可,不得翻版,翻版必究;版权归属 HaoTeam Inc;
 */

namespace haoteam\service;

use PHPMailer\PHPMailer\PHPMailer;
use app\models\AdminConfig;

/**
 * 邮箱服务
 * Class EmailService
 * Tiger <1192851302@qq.com> 2021-10-15 12:49:50
 */
class EmailService {

    /**
     * 发送邮箱
     * @author Tiger <1192851302@qq.com>
     * @param type $user
     * @param type $code
     * @return type
     */
    public static function send($user, $subject, $body = '', $attachment = '') {
        $config = AdminConfig::getAll(5);
        //实例化PHPMailer核心类
        $mail = new PHPMailer();
        //$mail->SMTPDebug = 0; #是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
        //$mail->Debugoutput = function($str, $level) {
        //    exception("debug level {$level}; message: {$str}");
        //};
        $mail->isSMTP(); #使用smtp鉴权方式发送邮件
        $mail->SMTPAuth = true; #smtp需要鉴权 这个必须是true
        $mail->Host = $config['send_email_host'] ?: 'smtp.exmail.qq.com'; #链接qq域名邮箱的服务器地址
        $mail->SMTPSecure = 'ssl'; #设置使用ssl加密方式登录鉴权
        $mail->Port = 465; #设置ssl连接smtp服务器的远程服务器端口号
        $mail->CharSet = 'UTF-8'; #设置发送的邮件的编码
        $mail->FromName = $config['send_email_from_ame'] ?: '鹏峰用工'; #设置发件人昵称 显示在收件人邮件的发件人邮箱地址前的发件人姓名
        $mail->Username = $config['send_email_username'] ?: 'admin@piaochi.cn'; #smtp登录的账号
        $mail->Password = $config['send_email_password'] ?: 'qqQQ123'; #smtp登录的密码 使用生成的授权码
        $mail->From = $config['send_email_username'] ?: 'admin@piaochi.cn'; #设置发件人邮箱地址 同登录账号
        //邮件正文是否为html编码
        $mail->isHTML(true);
        //设置收件人邮箱地址
        $mail->addAddress($user); //添加多个收件人 则多次调用方法即可
        //添加该邮件的主题
        $mail->Subject = $subject;
        //添加邮件正文
        $mail->Body = $body;
        //为该邮件添加附件
        $mail->addAttachment($attachment);
        //发送邮件 返回状态
        try {
            $ret = $mail->send();
        } catch (\Exception $exc) {
            exception($exc->getMessage());
        }
        if ($ret) {
            //成功
            return true;
        }
        //失败
        exception('发送失败');
    }

}
